# 七、布尔型数组

import numpy as np

# # 7.1 创建布尔型数组
# arr1 = np.array([True, True, False])
# print(arr1)
# arr2 = np.array([[True, True], [False, True]])
# print(arr2)
# # 数组与数字作比较，可产生布尔型数组
# arr = np.arange(1, 7).reshape(2, 3)
# print("arr\n", arr)
# arr_3 = arr>=4
# print("arr_3\n", arr_3)
# # 我们将同维数组作比较，可产生布尔型数组
# arr4 = np.arange(1, 10)
# print("arr4", arr4)
# arr5 = np.ones(9) * 5
# print("arr5", arr5)
# arr6 = arr4 > arr5
# print("arr6\n", arr6)
# # Python 基础里，同时检查多个条件使用的与、或、非是 and、or、not。
# # 但 NumPy 中使用的与、或、非是 & 、 | 、 ~ 。
# arr7 = ((arr4 < 4) | (arr4 > 6))
# # arr8 = ((arr4 < 4) or (arr4 > 6)) # 语法错误
# print("arr7\n", arr7)

# # 7.2 布尔型数组中 True 的数量
# # np.sum( )函数：统计布尔型数组里 True 的个数。
# arr1 = np.random.normal(0, 1, 100)
# num = np.sum((arr1 > -1) & (arr1 < 1)) # 统计该分布中绝对值小于 1 的元素个数
# print(num)
# # np.any( )函数：只要布尔型数组里含有一个及其以上的 True，就返回 True。
# arr2 = np.arange(1, 10)
# arr3 = np.flipud(arr2)
# arr_compare = arr2 == arr3
# print("arr_compare\n", arr_compare)# 这两个数组里对应位置是否相同
# print(np.any(arr_compare)) 
# # np.all( )函数：当布尔型数组里全是 True 时，才返回 True，示例如下。
# arr4 = np.random.normal(500, 70, 100) # 模拟英语六级的成绩，创建 100 个样本
# print(np.all(arr4 > 250)) # 判断是否所有考生的分数都高于 250
# arr5 = np.array([True, True, True])
# print(np.all(arr5))


# # 7.3 布尔型数组作为掩码
# """
# 若一个普通数组和一个布尔型数组的维度相同，
# 可以将布尔型数组作为普通数组的掩码，
# 这样可以对普通数组中的元素作筛选
# """
# # 筛选出数组中大于、等于或小于某个数字的元素。
# arr = np.arange(1,13).reshape(3,4)# 创建数组
# print("arr\n", arr)
# arr1 = arr>4
# print(type(arr1), "arr1\n", arr1)
# arr2 = arr[arr1] # 筛选出 arr > 4 的元素
# print(type(arr2), "arr2\n", arr2) # 注意，这个矩阵进行掩码操作后，退化为了向量。
# # 筛选出数组逐元素比较的结果。
# arr3 = np.arange(1,10)
# arr4 = np.flipud(arr3)
# print("arr3\n", arr3)
# print("arr4\n", arr4)
# print("arr3 > arr4\n", arr3 > arr4)
# # 筛选出 arr3 > arr4 位置上的元素
# print("3中\n", arr3[arr3 > arr4])
# print("4中\n", arr4[arr3 > arr4])


# 7.4 满足条件的元素所在位置
arr = np.random.normal( 500,70,100)# 模拟英语六级成绩的随机数组，取100个样本
print(np.where(arr>600)) # 找出六级成绩超过 650 的元素所在位置
print(np.where(arr == np.max(arr))) # 找出六级成绩最高分的元素所在位置
